package edu.gduf.dao;
/*
@author qw
@date 2020/10/10 - 22:50
**/

import edu.gduf.domain.Cooperation;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 组队信息dao层接口
 */
public interface CooperationDao {

    /**
     * 组队信息发布（添加组队信息）
     * @param cooperation 前端表单提交cooperation数据
     * @return 1为成功 0为失败
     */
    int addCooperation(Cooperation cooperation);

    /**
     * 组队信息删除
     * @param coid 组队信息表的主键coid
     * @return 1为成功 0为失败
     */
    int deleteCooperation(Integer coid);

    /**
     * 组队信息修改
     * @param cooperation 端表单提交cooperation修改过的数据
     * @return 1为成功 0为失败
     */
    int updateCooperation(Cooperation cooperation);

    /**
     * 组队信息查询（单条）
     * @param coid 组队信息表主键
     * @return cooperation对象
     */
    Cooperation selectCooperationByCoid(Integer coid);

    /**
     *  浏览量增加
     * @param coid 所浏览的组队信息对应的编号coid
     * @param views 浏览量
     * @return  1为成功 0为失败
     */
    int addViews(@Param("coid") Integer coid, @Param("view") Integer views);

    /**
     * 组队信息查询（全部-分页）
     *
     * @param startIndex 从第x开始查询的信息下标
     * @param pageSize   一页信息的数量
     * @return 组队信息列表
     */
    List<Cooperation> selectCooperationList(@Param("startIndex") Integer startIndex, @Param("pageSize") Integer pageSize);

    /**
     * 组队信息数量查询
     * @return 组队信息数量
     */
    Integer totalNumber();

    /**
     * 组队信息查询（根据标题-模糊/精准查询）
     * @param title 查询条件
     * @return 符合条件的信息列表
     */
    List<Cooperation> selectCooperationByTitle(@Param("title") String title);

    /**
     * 组队信息（根据标题模糊查询）的数量
     * @param title 查询条件
     * @return 模糊查询的数量
     */
    Integer countByTitle(String title);

    /**
     * 组队信息查询（根据分类查询）
     * @param cid 查询条件（分类表中的主键id）
     * @param startIndex 开始查询的下标
     * @param pageSize 一页内显示的数据量
     * @return 符合条件的信息列表
     */
    List<Cooperation> selectCooperationByCid (@Param("cid") Integer cid, @Param("startIndex") Integer startIndex, @Param("pageSize") Integer pageSize);

    /**
     * 组队信息（根据分类编号查询）的数量
     * @param cid 查询条件
     * @return 条件查询的数量
     */
    Integer countByCid (Integer cid);

    /**
     * 组队信息查询（根据组队要求查询--模糊）
     * @param demand 查询条件---组队要求
     * @return 符合条件的信息列表
     */
    List<Cooperation> selectCooperationByDemand(@Param("demand") String demand);

    /**
     * 组队信息（根据组队要求查询--模糊）的数量
     * @param demand 查询条件
     * @return 条件查询的数量
     */
    Integer countByDemand (String demand);

    /**
     * 组队信息查询（根据组队标题或要求查询--模糊）
     * @param str 查询条件---组队要求
     * @return 符合条件的信息列表
     */
    List<Cooperation> selectCooperationByCondition(@Param("condition") String str, @Param("startIndex") Integer startIndex, @Param("pageSize") Integer pageSize);

    /**
     * 组队信息查询（根据组队标题或要求查询--模糊） 的数量
     * @param str 查询条件
     * @return 条件查询的数量
     */
    Integer countByCondition(@Param("condition") String str);


    /**
     * 通过组队人数的更改，更新组队状态
     * @param coid 组队信息编号（主键）
     * @return 1-成功 0-失败
     */
    Integer updateStatus (Integer coid);

    /**
     * 更新组队人数
     * @param coid 组队信息编号（主键）
     * @return 1-成功 0-失败
     */
    int updatePopulation(@Param("coid") Integer coid);

    /**
     * 根据uid查询该用户发布的所有组队信息
     * @param uid 用户主键
     * @param startIndex 开始查询下标
     * @param pageSize 一页需展示的信息数量
     * @return
     */
    List<Cooperation> selectCooperationByUid(@Param("uid") Integer uid, @Param("startIndex") Integer startIndex, @Param("pageSize") Integer pageSize);

    /**
     *  统计某用户发布的所有信息数量
     * @param uid
     * @return
     */
    Integer countByUid(@Param("uid") Integer uid);

    /**
     * 根据id更新list组队成员
     * @param coid
     * @param list
     */
    void updateList(@Param("coid") Integer coid, @Param("list") String list);

}
